<?php

// ### AclAssistant : Item
class Action_Community_DeleteItem extends RL_Handler
{

	protected function init()
	{
		parent::init();
		$this->rh->UseClass("RL_URLGenerator");
	}
	public function process ()
	{
		$aa = $this->module->aa;
		$this->ctx->db->begin();
		$aa->getInfo();
		$aa->getAvailableOperations();
		$aa->checkDeletions( array($this, "shutdown") );

		if (!$aa->is_granted('item_delete')) {
			echo "У Вас нет прав на удаление этой записи.";
			$this->ctx->db->end();
			die();
		}

		if ($this->rh->POST['is_del']=='yes') {
			// убивать дык убивать

			// найдем объект
			$results = $this->ctx->store->find('objects where oid=='.$this->params['id_item']);
			$item_object = $results->next();

			// установим атрибут "удален"
			$item_object->data['is_deleted'] = 1;
			$item_object->is_deleted = 1;
			$item_object->save();

			// обновим таблицу классов и таблицу общей ленты
			if ($item_object->updateSense( substr($item_object->type, 1) ) &&
				$item_object->updateSense( 'allfeed' ) &&
				$aa->delete( $item_object->id ) 	// пометим как удаленные всех детей
				)  {

					if (!$this->ctx->db->isErrorInTransaction()) {
						// добавим событие об удалении итема

						$m_oi = $this->ctx->mm->getModel("OpenId", "m");
						$rs = $m_oi->get_openid_for_user_by_oid($item_object->data['posted_by_id']);
						while ($openid = $rs->next()) {
							$this->ctx->logger->event(new Event(time(), "delete_item", $openid['openid'], $item_object->id));

							// а теперь всем комментам внутри нужно сгенерить событие "удален"
							$prefix = $this->ctx->db->db_prefix;
							$rs2 = $this->ctx->store->findSQL(
							"SELECT {$prefix}objects.*, ao.openid FROM {$prefix}objects
							INNER JOIN {$prefix}class_comment c ON c.oid = {$prefix}objects.oid
							INNER JOIN {$prefix}class_auth_openid ao ON ao.oid = c.posted_by_id
							WHERE c.item_oid = ".$item_object->id." AND {$prefix}objects.is_deleted = 0"
							);

							while ($fc = $rs2->next()) {
								$row = $rs2->rs->current();
								$this->ctx->logger->event(new Event(time(), "delete_comment", $row['openid'], $fc->id));
							}

						}

						if ( $this->ctx->rh->use_search ) {
							include 'includes/workaholic.php';
							Workaholic::addTask(array($this, 'hashItem'), $item_object);
						}

						$message = "Постинг успешно удален.";
						//$this->goShowItem($message);
					} else $message = "Постинг не был удален, смотрите логи.";

				} else $message = "Постинг не был удален, смотрите логи.";

			$view = $this->rh->views->findByName('msg');
			$view->data = $aa->template_data;
			$view->data['message'] = $message;
		} else if ($this->rh->POST['is_del']=='no') {
			$message = 'Постинг не удален';
			$this->goShowItem($message);
		} else {
			$view = $this->rh->views->findByName('delete_sure');
			$view->data = $aa->template_data;
			$view->data['message'] = $message;
		}

		$this->rh->response->setContent( $view );

		$this->ctx->db->end();
	} // end of function execute

	public function goShowItem ($message)
	{
			$ug = new RL_URLGenerator($this->rh->router->getRule('showitem'));
			$ug->setRouter($this->rh->router);
			$ug->setParams($this->params);

			$this->rh->setMessage($message);
			// Итем не удален
			$url = $ug->generateUrl();
			$this->rh->redirect($url);
	} // end of method goShowItem

	public function hashItem( $obj ) {
		$this->rh->useClass('Search_Types');
		$searchTypes = new Search_Types($this->rh, $this->ctx->store);

		$parser = $searchTypes->getTypeParser($obj->type);
		if ( false === $parser ) {
			print "Can`t find parser for '{$obj->type}' type.\n";
			return;
		}

		$parser->deleteItem($obj->id);

		$parser->cleanWords();
	}
}
